-
Notifications
You must be signed in to change notification settings - Fork 321
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FIX: Use the invariant culture for capitalization when generating code #2156
base: develop
Are you sure you want to change the base?
Conversation
Glanced at the draft PR and I would just like to suggest to (if possible) get some unit test in that could catch any problems with culture info. |
Also I see that some tests are failing due to compilation issues apparently, fixing that in a moment. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The changes look good to me. Many thanks for going through all the cases!
The PR is still a draft, so this is probably still in work, but just a changelog and a link to a Jira ticket is missing in my POV.
377cefa
to
96e30ba
Compare
Moving this out of the draft stage:
|
58720fc
to
e1de946
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great to get this fix in, I am approving but had some minor comments I let you decide whether they needs to be addressed or not.
@@ -66,7 +67,7 @@ private static bool IsPathInExcludedFolder(string path) | |||
// Check if the path or any part of it contains any of the excluded folder names | |||
foreach (string folder in excludedFolders) | |||
{ | |||
if (path.ToLower().Contains(folder.ToLower())) | |||
if (path.Contains(folder, StringComparison.InvariantCultureIgnoreCase)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great to fix case issues here, but I wonder if this wasn't incorrect to begin with. Shouldn't this be using https://learn.microsoft.com/en-us/dotnet/api/system.io.path?view=net-9.0 which should take platform-specific behavior of underlying file systems into account instead? Its probably fine, but it is a bit of a warning flag in my eyes when code tries to "outsmart" the filesystem implementation. Its also interesting previous code was doing ToLower() on a constant that is already in lowercase (its not an arbitrary input). The point I am after is that on some OS you may have both a XR, Xr, xR and xr directory and they are all different. (e.g. linux)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess for paths, we should probably use https://github.com/lucasmeijer/NiceIO because it makes pathing so easily and cool. For this instance, I would agree it might have been somewhat incorrect on case-sensitive file systems - which are normally Linux and the default Mac. Won't target changing behaviour here though.
@@ -73,10 +73,10 @@ public static void RegisterPlatform(BuildTarget target) | |||
private static bool IsPluginInstalled() | |||
{ | |||
var registeredPackages = UnityEditor.PackageManager.PackageInfo.GetAllRegisteredPackages(); | |||
var plugInName = PlugInName + EditorUserBuildSettings.activeBuildTarget.ToString().ToLower(); | |||
var plugInName = PlugInName + EditorUserBuildSettings.activeBuildTarget.ToString(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like you fixed a separate issue here right? Or are active build targets package names ToUpper? I am confused around how this previously was supposed to work. The new code looks solid though, effectively ignoring case.
} | ||
|
||
public static bool operator==(string a, InternedString b) | ||
{ | ||
return string.Compare(a.ToLower(CultureInfo.InvariantCulture), b.m_StringLowerCase, | ||
StringComparison.InvariantCultureIgnoreCase) == 0; | ||
return string.Compare(a, b.m_StringLowerCase, StringComparison.InvariantCultureIgnoreCase) == 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor: One could call the other operator, e.g. return (b == a) to avoid the redundant code
} | ||
|
||
public static bool operator!=(string a, InternedString b) | ||
{ | ||
return string.Compare(a.ToLower(CultureInfo.InvariantCulture), b.m_StringLowerCase, | ||
StringComparison.InvariantCultureIgnoreCase) != 0; | ||
return string.Compare(a, b.m_StringLowerCase, StringComparison.InvariantCultureIgnoreCase) != 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor: One could call the other operator, e.g. return (b != a)
… the current culture
21c0680
to
ee83350
Compare
Did not forget about this one, will check today/tomorrow |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, I checked generating and using input actions with non latin characters (Chinese, Russian, Japanese, Arabic, Hebrew, Korean, Thai, Vietnamese, Turkish) on Windows and Mac with Chinese, English and Turkish locales.
But I have to note that I wasn't able to repro the original turkish i character issue on my end. The latin letters i and I stayed the same after generating them on a different locale
Description
A customer with the Turkish locale set, noticed that when we're generating function names for Input Actions, we're using the wrong function. This way, the "info" input action results in Onİnfo method name (notice the dot above the I, it's apparently how the capital for i looks like in Turkish).
Testing status & QA
Pending a QA pass, local testing by dev, a new regression test added
Overall Product Risks
Checklist
Before review:
Changed
,Fixed
,Added
sections.Area_CanDoX
,Area_CanDoX_EvenIfYIsTheCase
,Area_WhenIDoX_AndYHappens_ThisIsTheResult
.During merge:
NEW: ___
.FIX: ___
.DOCS: ___
.CHANGE: ___
.RELEASE: 1.1.0-preview.3
.After merge: